﻿#define _CRT_SECURE_NO_WARNINGS 1
//分支与循环下

//(1)rand函数
//会生成伪随机数，范围在0-32767,同一个种子下运算生成的基准随机数是相同的
//直接使用rand函数，默认种子值为1
//需要包含一个头文件<stdlib.h>
//


//(2)调用srand函数来改变种子值(需要返回无符号整型）

//void srand(unsigned int seed);
//srand只需要调用一次，不需要多次设置
#include <stdio.h>
#include<stdlib.h>
int main()
{
	srand(2);        /*  设置种子值为2*/
	printf("%d\n", rand());
	return 0;
}

//(3)利用time函数时刻改变种子值，来做到不断随机生成数

#include<time.h>                        /*利用时间戳的改变来改变种子值*/
int main()
{
	srand((unsigned int)time(NULL));   /*srand需要无符号整型，用time返回一个NULL指针*/
	printf("%d\n", rand());
}

//（4）设置随机数范围
//1.rand() % 100 + 1;       rand的值%100 ，余数范围为0-99，则+1后范围为1-100
//2.生成100-200之间的随机数
//100 + rand()% (200 - 100 +1)       rand%101余数是0-100，加100后范围为100-200
//3.生成a-b之间的数字
//a + rand() % (b - a + 1)


//做一个猜数字游戏，电脑生成1-100之间的随机数，玩家猜数字，根据猜的大小给出猜大了或小了的反馈，猜对了游戏结束
//方法（1）用rand生成一个随机数

#include<time.h>
#include<stdlib.h>

void game()
{
	//1.生成随机值
	int r = rand() % 100 + 1;
	//2.猜数字
	int guess = 0;
	int count = 5;     /* 设置游戏只有五次机会，用完则游戏失败*/
	while (count)        
	{
		printf("\n还剩下%d次机会 \n",count);
		printf("请输入你猜的数字:>");
		scanf("%d", &guess);
		if (guess > r)
			printf("猜大了\n");
		else if (guess < r)
			printf("猜小了\n");
		else
		{
			printf("猜测正确，恭喜你\n");
			break;
		}
		count--;
	}
	if (count == 0)
	{
		printf("游戏失败,正确答案是:%d\n", r);
	}

}
void menu()
{
	printf("*********************\n");
	printf("******1.play*********\n");
	printf("******0.exit*********\n");    /*打印菜单，用do while语句，可以首先打印*/
	printf("*********************\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));    //在主函数体内定义随机值可以避免每次执行 都需要设置随机值
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);     //1,0
		switch (input)
		{
		case 1:
			game();       //把一段代码封装在里面，作为游戏内容，可调用（void game（））
			printf("猜数字游戏开始\n");                  
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误，请重新输入\n");
			break;
		}
	} while (input);

	return 0;

}

